//
//  XWXSqliteModelTool.h
//  XWXSqlite
//
//  Created by 许卫星 on 17/9/4.
//  Copyright © 2017年 wxxu. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface XWXSqliteModelTool : NSObject

/**
 获取表格名称
 */
+ (NSString *)tableNameWithModelClass: (Class)cls;

/**
 获取临时表格名称
 */
+ (NSString *)tempTableNameWithModelClass: (Class)cls;

/**
 获取模型里面, 需要创建表格的所有字段/类型, 组成的数组
 */
+ (NSDictionary *)modelIvarNameSqlTypeDic: (Class)cls;

/**
 成员变量键值对字典
 @param model 成员变量类
 @return 键值对字典
 */
+ (NSDictionary *)modelIvarNameValueDic:(id)model;
//需要update的数据
+ (NSDictionary *)updateModelIvarNameValueDic:(id)model;

/**
 成员变量名称拼接的字符串
 @param cls 成员变量类
 @return 拼接的字符串
 */
+ (NSString *)modelIvarNameStr:(Class)cls;

/**
 成员变量的所有值拼接的字符串
 @param model 成员变量类
 @return 拼接的字符串
 */
+ (NSString *)modelIvarValueStr:(id)model;


/**
 获取类的主键，如果没有设置主键，默认给生成一个_id自增涨主键
 @param cls 对象模型类
 @return 主键
 */
+ (NSString *)primaryKeyWithCls:(Class)cls;

/**
 字段名称和sql类型, 拼接的用户创建表格的字符串
 @param cls 类名
 @return 字符串 如: name text,age integer,score real
 */
+ (NSString *)columnNamesAndTypesStr:(Class)cls;

/**
 排序后的类名对应的成员变量数组, 用于和表格字段进行验证是否需要更新
 */
+ (NSArray *)allTableSortedIvarNames:(Class)cls;

//+ (NSString)
/**
 获取模型里面, 需要创建表格的所有字段/类型, 组成的数组
 */
+ (NSString *)typeWithIvarName: (NSString *)ivarName class:(Class)cls;

/**
 将数据库返回的字典转成对应的Class对象

 @param cls              ClassModel对象
 @param propertyKeyValue 字典

 @return 数据对象
 */
+ (id)assginDicToModelClass:(Class)cls withDictionary:(NSDictionary *)propertyKeyValue;

@end
